package com.sevici;


import java.io.FileInputStream;
import java.util.List;
import java.util.Timer;
import java.util.TimerTask;

import javax.xml.parsers.SAXParser;
import javax.xml.parsers.SAXParserFactory;

import org.xml.sax.InputSource;
import org.xml.sax.XMLReader;

import android.app.ProgressDialog;
import android.content.Intent;
import android.os.Bundle;

import com.google.android.maps.GeoPoint;
import com.google.android.maps.MapActivity;
import com.google.android.maps.MapController;
import com.google.android.maps.MapView;
import com.sevici.model.Estacion;
import com.sevici.servicios.GPSServicio;
import com.sevici.servicios.ServiceUpdateUIListener;


// longitud, latitud insur.
// -6.005323827266693 37.40428540856928

public class LocaBiciActivity extends MapActivity implements ServiceUpdateUIListener{
	private ParsedXMLSevici contenedorEstaciones = null;
	private List<Estacion> estaciones = null;	
	private MapController mapController = null;
	private LocationLocaBici localizacionOverlayLocaBici = null;
	private MapView mapView = null;
	private ProgressDialog progressDialog = null;
	
	@Override
	protected boolean isRouteDisplayed() {
	    return false;
	}
	
	@Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
        
        // zoom para el mapa
        mapView = (MapView) findViewById(R.id.mapview);
        mapView.setBuiltInZoomControls(true);		
        
        progressDialog = ProgressDialog.show(this, "Procesando..", "Cargando estaciones", true, true);
        
        //Inicializamos el Servicio que estara en Back para revisar el estado de las estaciones.        
        startService();        
       GPSServicio.setUpdateListener(this);
        
        // Creamos un timer para ejecutar en background
        Timer timer = new Timer();
		timer.schedule(   new TimerTask() {
			public void run() {	
				GeoPoint lastPoint = null;
				if (contenedorEstaciones != null) {
					for (Estacion elem : contenedorEstaciones.getEstaciones()) {
						CustomOverlay overlay = new CustomOverlay(elem);
						mapView.getOverlays().add(overlay);
					}
				}
				progressDialog.dismiss();
			}
		}, 2000);
								
		// localizacion GPS
		
		localizacionOverlayLocaBici = new LocationLocaBici(this, mapView);
		mapView.getOverlays().add(localizacionOverlayLocaBici);
		
		// @TODO posicionar por gps/localizacion
		// posicionamos en el ultimo punto
		mapController = mapView.getController();
		mapController.animateTo(mapView.getMapCenter());
		mapController.setZoom(15);
		
		/* Display the TextView. */
		//this.setContentView(tv);
    }

	private void startService() {
    	Intent svc = new Intent(this, GPSServicio.class);
        startService(svc);	
	}

	static ParsedXMLSevici getContenedorEstaciones() throws  Exception {
		
		/* Creamos un SAXParser. */
		SAXParserFactory spf = SAXParserFactory.newInstance();
		SAXParser sp = spf.newSAXParser();

		/* Cogemos el XMLReader del SAXParser que hemos creado. */
		XMLReader xr = sp.getXMLReader();
		
		/* Creamos un nuevo ContentHandler y lo aplicamos al XML-Reader*/
		//XMLHandler myXMLHandler = new XMLHandler();
		XMLHandlerLocaBici myXMLHandler = new XMLHandlerLocaBici();
		xr.setContentHandler(myXMLHandler);
		
		FileInputStream archivo = new FileInputStream("sdcard/estaciones_corta.xml");
		InputSource parseador = new InputSource(archivo);
		//parseador.setEncoding("iso-8859-1");
		xr.parse(parseador);
			
		// URL url
		//xr.parse(new InputSource( url.openStream()));
		/* Acaba el tratamiento. */
		
		/* Ponemos los datos por pantalla con el XMLHandler. */
		return myXMLHandler.getParsedData();
	}

	/**
	 * @return the localizacionOverlayLocaBici
	 */
	public LocationLocaBici getLocalizacionOverlayLocaBici() {
		return localizacionOverlayLocaBici;
	}

	/**
	 * @param localizacionOverlayLocaBici the localizacionOverlayLocaBici to set
	 */
	public void setLocalizacionOverlayLocaBici(LocationLocaBici localizacionOverlayLocaBici) {
		this.localizacionOverlayLocaBici = localizacionOverlayLocaBici;
	}
	
	@Override
	public void onPause(){
		super.onPause();
		localizacionOverlayLocaBici.disableCompass();
		localizacionOverlayLocaBici.disableMyLocation();
	}

 
	@Override
	public void onResume(){
		super.onResume();
		//localizacionOverlayLocaBici.enableMyLocation();
		//localizacionOverlayLocaBici.enableCompass();					
	}

	public void update(int count) {
		// TODO Auto-generated method stub
		
	}

	public void update(List<Estacion> estacionesServicio) {
		this.estaciones = estacionesServicio;		
	}
}